home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-04
/
dosref23.zip
/
CHAPTER.005
< prev
next >
Wrap
Text File
|
1992-03-16
|
151KB
|
2,867 lines
** Programmer's Technical Reference for MSDOS and the IBM PC **
USA copyright TXG 392-616 ALL RIGHTS RESERVED
───────────────────────────────┤ DOSREF (tm) ├────────────────────────────────
ISBN 1-878830-02-3 (disk-based text)
Copyright (c) 1987, 1992 Dave Williams
┌─────────────────────────────┐
│ Shareware Version, 03/16/92 │
│ Please Register Your Copy │
└─────────────────────────────┘
C H A P T E R F I V E
Interrupts 22h Through 86h
note: the registered version of this chapter is more than twice this size.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 22h Terminate Address ..................................... 5**1 │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0088h)
This interrupt transfers control to the far (dword) address at this interrupt
location when an application program terminates. The default address for this
interrupt is 0:0088h through 0:008Bh. This address is copied into the program's
Program Segment Prefix at bytes 0Ah through 0Dh at the time the segment is
created and is restored from the PSP when the program terminates. The calling
program is normally COMMAND.COM or an application. Do not issue this interrupt
directly, as the EXEC function call does this for you. If an application
spawns a child process, it must set the Terminate Address prior to issuing the
EXEC function call, otherwise when the second program terminated it would
return to the calling program's Terminate Address rather than its own. This
address may be set with int 21, function 25h.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 23h Ctrl-Break Exit Address ............................... 5**2 │
└─────────────────────────────────────────────────────────────────────────────┘
(0:008Ch)
If the user enters a Ctrl-Break during STDIN, STDOUT, STDPRN, or STDAUX, int
23h is executed. If BREAK is on, int 23h is checked on MOST function calls
(notably 06h). If the user written Ctrl-Break routine saves all registers, it
may end with a return-from-interrupt instruction (IRET) to continue program
execution. If the user-written interrupt program returns with a long return, the
carry flag is used to determine whether the program will be aborted. If the
carry flag is set, the program is aborted, otherwise execution continues (as
with a return by IRET). If the user-written Ctrl-Break interrupt uses function
calls 09h or 0Ah, (Display String or Buffered Keyboard Input) then a three-byte
string of 03h-0Dh-0Ah (ETX/CR/LF) is sent to STDOUT. If execution is continued
with an IRET, I/O continues from the start of the line. When the interrupt
occurs, all registers are set to the value they had when the original function
call to DOS was made.
There are no restrictions on what the Ctrl-Break handler is allowed to do,
including DOS function calls, as long as the registers are unchanged if an IRET
is used.
If the program creates a new segment and loads a second program which itself
changes the Ctrl-Break address, the termination of the second program and
return to the first causes the Ctrl-Break address to be restored from the PSP
to the value it had before execution of the second program.
DOS can check for a Ctrl-C at a couple of different places. In at least
some cases, the value in the AX register on entry to the int 23h handler
is the same as it was on the original entry to int 21h.
COMMAND.COM makes use of this fact in its int 23h handler. When running
a batch file, if you press Ctrl-C it prompts you with the "Terminate batch
job (Y/N)?" question. If you press Ctrl-C in response to that question,
the int 23h handler notices that it's being called recursively (having
set an internal flag), and uses the value of AX to determine how far it
had gotten on the previous pass. If you have not responded to the query
yet, it asks it again; otherwise it just terminates the current program.
This could cause a problem in a program which was catching int 23h so that
it could release EMS or other resources on exit, then pass it on to the
original handler. When called a second time, it would correctly notice
that it had already cleaned up and wouldn't do it again, but by the time it
got to the original handler, AX would be trashed. The result would be the
standard "Memory allocation error/Cannot load COMMAND, system halted".
Apparently, if you want to catch int 23h but also pass it on to the original
handler, you should either save and restore registers, or restore the original
vector on the first trap so you don't get invoked again.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 24h Critical Error Handler ................................ 5**3 │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0090h)
When an unrecoverable I/O error occurs, control is transferred to an error
handler in the resident part of COMMAND.COM with an int 24h. This may be the
standard DOS error handler (Abort, Retry, Ignore, Fail?) or a user-written
routine.
On entry to the error handler, AH will have its bit 7=0 (high order bit)
if the error was a disk error (probably the most common error), bit 7=1 if not.
BP:SI contains the address of a Device Header Control Block from which
additional information can be retrieved (see below). The register is set up
for a retry operation and an error code is in the lower half of the DI register
with the upper half undefined.
DOS places the following items on the user stack. The stack contains the
following from top to bottom:
IP │ DOS registers from the issuing int 24h
CS │
flags │
───────┼───────────────────────────────────────────────────────
AX │ user registers at time of original int 21h request
BX │
CX │
SI │
DI │
BP │
DS │
ES │
───────┼───────────────────────────────────────────────────────
IP │ original int 21h from the user to DOS
CS │
flags │
To reroute the critical error handler to a user-written critical error handler,
the following should be done:
Before an int 24h occurs:
1) The user application initialization code should save the int 24h vector and
replace the vector with one pointing to the user error routine.
When the int 24h occurs:
2) When the user error routine received control it should push the flag
registers onto the stack and execute a far call to the original int 24h
vector saved in step 1.
3) DOS gives the appropriate prompt, and waits for user input (Abort, Retry,
Ignore, Fail). After the user input, DOS returns control to the user error
routine instruction following the far call.
4) The user error routine can now do any tasks necessary. To return to the
original application at the point the error occurred, the error routine needs
to execute an IRET instruction. Otherwise, the user error routine should
remove the IP, CS, and flag registers from the stack. Control can then be
passed to the desired routine.
Int 24h provides the following values in registers on entry to the interrupt
handler:
entry AH status byte (bits)
7 0 disk I/O hard error
1 other error - if block device, bad FAT
- if char device, code in DI
6 unused
5 0 if IGNORE is not allowed
1 if IGNORE is allowed
4 0 if RETRY is not allowed
1 if RETRY is allowed
3 0 if FAIL is not allowed
1 if FAIL is allowed
2 \ disk area of error 00 = DOS area 01 = FAT
1 / 10 = root dir 11 = data area
0 0 if read operation
1 if write operation
AL drive number if AH bit 7 = 1, otherwise undefined
If it is a hard error on disk (AH bit 7=0), register AL
contains the failing drive number (0=A:, 1=B:, etc.).
BP:SI address of a Device Header Control Block for which error
occurred. Block device if high bit of BP:SI+4 = 1
DI (low byte) error code (note: high byte is undefined)
error code description
00h attempt to write on write-protected diskette
01h unknown unit
02h drive not ready
03h unknown command
04h data error (bad CRC)
05h bad request structure length
06h seek error
07h unknown media type
08h sector not found
09h printer out of paper
0Ah write fault
0Bh read fault
0Ch general failure
0Fh invalid disk change (DOS 3.0+)
10h FCB unavailable (DOS 3.0+)
11h sharing buffer overflow (DOS 3.0+)
note: Only codes 00h through 0Ch are defined in DR-DOS 3.32.
The handler must return this information:
The registers are set such that if an IRET is executed, DOS responds according
to (AL) as follows:
AL 00h IGNORE the error
01h RETRY the operation
02h ABORT via int 22h (jump to terminate address)
03h FAIL the system call that is in progress (DOS 3.0+)
note 1) Be careful when choosing to ignore a response because this causes DOS
to think that an operation has completed successfully when it may not
have.
2) If the error was a character device, the contents of AL are invalid.
3) Early PS/2 BIOSes did not perform a retry on disk errors until a disk
had been read at least once after boot-up.
Other Errors
If AH bit 7=1, the error occurred on a character device, or was the result of
a bad memory image of the FAT. The device header passed in BP:SI can be examined
to determine which case exists. If the attribute byte high-order bit indicates
a block device, then the error was a bad FAT. Otherwise, the error is on a
character device.
If a character device is involved, the contents of AL are unpredictable, and
the error code is in DI as above.
note 1) Before giving this routine control for disk errors, DOS performs several
retries. The number of retries varies according to the DOS version.
2) For disk errors, this exit is taken only for errors occurring during an
int 21h function call. It is not used for errors during an int 25h or
26h.
3) This routine is entered in a disabled state.
4) All registers must be preserved.
5) This interrupt handler should refrain from using DOS function calls. If
necessary, it may use calls 01h through 12h. Use of any other call
destroys the DOS stack and leaves DOS in an unpredictable state.
6) The interrupt handler must not change the contents of the device header.
7) If the interrupt handler handles errors itself rather than returning to
DOS, it should restore the application program's registers from the
stack, remove all but the last three words on the stack, then issue an
IRET. This will return to the program immediately after the int 21h
that experienced the error. Note that if this is done DOS will be in an
unstable state until a function call higher than 12h is issued,
therefore not recommended.
8) For DOS 3.x+, IGNORE requests (AL=0) are converted to FAIL for critical
errors that occur on FAT or DIR sectors.
9) For DOS 3.10 up, IGNORE requests (AL=0) are converted to FAIL requests
for network critical errors (50-79).
10) The device header pointed to by BP:SI is as follows:
dword pointer to next device (0FFFFh if last device)
word attributes:
bit 15 1 if character device.
If bit 15 is 1:
bit 0 = 1 if current standard input
bit 1 = 1 if current standard output
bit 2 = 1 if current NULL device
bit 3 = 1 if current CLOCK device
0 if block device.
bit 14 is the IOCTL bit
word pointer to device driver strategy entry point
word pointer to device driver interrupt entry point
8 bytes character device named field for block devices. The first byte
is the number of units.
11) To tell if the error occurred on a block or character device, look at
bit 15 in the attribute field (WORD at BP:SI+4).
12) If the name of the character device is desired, look at the eight bytes
starting at BP:SI+10.
Handling of Invalid Responses (DOS 3.0+)
A) If IGNORE (AL=0) is specified by the user and IGNORE is not allowed
(bit 5=0), make the response FAIL (AL=3).
B) If RETRY (AL=1) is specified by the user and RETRY is not allowed
(bit 4=0), make the response FAIL (AL=3).
C) If FAIL (AL=3) is specified by the user and FAIL is not allowed
(bit 3=0), make the response ABORT. (AL=2)
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 25h Absolute Disk Read .................................... 5**4 │
│Interrupt 26h Absolute Disk Write ................................... 5**5 │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0094h, 0:0098h)
These transfer control directly to the disk device driver. On return, the
original flags are still on the stack (put there by the INT instruction). This
is necessary because return information is passed back in the current flags.
All registers except the segment registers are destroyed by these calls.
These interrupts should be avoided for software that is intended to run on
a network, as they may cause troubles in network environments.
PC-MOS/386 provides these services only for compatibility with existing
DOS-mode apps. 25h/26h are not available for native mode 386-mode DOS apps.
The number of sectors specified is transferred between the given drive and the
transfer address. Logical sector numbers are obtained by numbering each sector
sequentially starting from track 0, head 0, sector 1 (logical sector 0) and
continuing along the same head, then to the next head until the last sector on
the last head of the track is counted. Thus, logical sector 1 is track 0, head
0, sector 2; logical sector 2 is track 0, head 0, sector 3; and so on. Numbering
then continues wih sector 1 on head 0 of the next track. Note that although the
sectors are sequentially numbered (for example, sectors 2 and 3 on track 0 in
the example above), they may not be physically adjacent on disk, due to
interleaving. Note that the mapping is different from that used by DOS 1.10 for
double-sided diskettes.
The request is as follows:
int 25h for Absolute Disk Read, | except Compaq DOS 3.31 or DOS 4.0+
int 26h for Absolute Disk Write | over-32Mb partitions
entry AL drive number (0=A:, 1=B:, etc)
CX number of sectors to read (int 25h) or write (int 26h)
DS:BX segment/offset of disk transfer address buffer (DTA)
DX first relative sector to read - beginning logical sector number
return CF set if error
AL error code issued to int 24h in low half of DI
AH 01h bad command
02h bad address mark
03h write-protected disk
04h requested sector not found
08h DMA failure
10h data error (bad CRC)
20h controller failed
40h seek operation failed
80h attachment failed to respond
note 1) DOS returns with a far ret which leave the original flags on the stack.
Be sure to pop the stack to prevent uncontrolled growth.
2) MSC 3.0's int86() was a straight interrupt call. MSC 4.0 and later
make special provision for adjusting the stack on int 25h and 26h.
This probably won't hurt anything but you should be aware of it.
3) Ints 25h and 26h will try rereading a disk if they get an error the
first time.
To address partition sizes greater than 32Mb an extended format is provided
in Compaq DOS 3.31, DOS 4.0, and DR-DOS. This format passes a 32-bit address
value by means of a parameter block. The extended format may be used to
address disks smaller than 32Mb as well as larger.
The request is as follows:
int 25h for Absolute Disk Read, | Compaq DOS 3.31 or DOS 4.0+
int 26h for Absolute Disk Write | over-32Mb partitions
entry AL drive number (0=A:, 1=B:, etc)
CX 0FFFFh
DS:BX address of parameter block. Block format:
4 bytes sector number
2 bytes number of sectors to read
4 bytes FAR pointer to buffer
return CF set if error
AL error code issued to int 24h in low half of DI
AH 01h bad command
02h bad address mark
03h write-protected disk
04h requested sector not found
08h DMA failure
10h data error (bad CRC)
20h controller failed
40h seek operation failed
80h attachment failed to respond
note 1) DOS returns with a far ret which leave the original flags on the stack.
Be sure to pop the stack to prevent uncontrolled growth.
2) MSC 3.0's int86() was a straight interrupt call. MSC 4.0 and later
make special provision for adjusting the stack on int 25h and 26h.
This probably won't hurt anything but you should be aware of it.
3) Ints 25h and 26h will try rereading a disk if they get an error the
first time.
4) Partition is potentially >32M (and requires this form of the call) if
bit 1 of device attribute word in device driver is set.
5) In the IBM OS/2 Tech Ref Volume 1, page 7-33, under "DOS Environment
Software Interrupt Support", it lists:
25h direct read supported
26h direct write an error is returned on requests for
non-removable media
Interrupts 25h and 26h can read logical sectors only. They cannot read
hidden sectors.
Critical errors are not processed by ints 25h and 26h. Should one happen,
the interrupt routine will return an error value to the program but will not
itself call the critical error handler at int 24h.
The Microsoft DOS 5.0 Technical Reference refers to this call as "superceded"
and directs you to int 21h, fn 440Dh, minor code 61h, "Read Track on Logical
Drive" and minor code 41h, "Write Track on Logical Drive." See Chapter 4.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 27h Terminate And Stay Resident ........................... 5**6 │
└─────────────────────────────────────────────────────────────────────────────┘
(0:009Ch) (obsolete)
This vector is used by programs that are to remain resident when COMMAND.COM
regains control.
After initializing itself, the program must set DX to its last address plus
one relative to the program's initial DS or ES value (the offset at which other
programs can be loaded), then execute interrupt 27h. DOS then considers the
program as an extension of itself, so the program is not overlaid when other
programs are executed. This is useful for loading programs such as utilities
and interrupt handlers that must remain resident.
entry CS current program segment
DX last program byte + 1
return none
note 1) This interrupt must not be used by .EXE programs that are loaded into
the high end of memory.
2) This interrupt restores the interrupt 22h, 23h, and 24h vectors in the
same manner as interrupt 20h. Therefore, it cannot be used to install
permanently resident Ctrl-Break or critical error handler routines.
3) The maximum size of memory that can be made resident by this method is
64K.
4) Memory can be more efficiently used if the block containing a copy of
the environment is deallocated before terminating. This can be done by
loading ES with the segment contained in 2Ch of the PSP, and issuing
function call 49h (Free Allocated Memory).
5) DOS function call 4Ch allows a program to pass a completion code to DOS,
which can be interpreted with processing (see function call 31h).
6) If int 27h is called by a program linked with the /HIGH switch, it
will occupy the top of memory and prevent COMMAND.COM from reloading,
which is probably not what you want.
7) Int 21, function 31h is the preferred method to cause a program to
remain resident because this allows return information to be passed and
allows a program larger than 64K to remain resident.
8) It is possible to make an EXE program resident with this call by
putting a 27h in the second byte of the PSP and terminating with a
RET FAR.
9) Programs terminating with int 27h do not close files on exit. Your
program must explicitly close any opened files before going resident.
10) Int 27h does not work correctly when DX contains values from 0FFF1h to
0FFFFh. In this case, DOS discards the high bit of the contents of DX,
resulting in 32k less resident memory than was requested by the
program.
11) This interrupt will work with PC-MOS/386, but there are a number of
MOS-specific advantages to using int 21h/31h instead. See Chapter
4 for further explanation.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 28h (not documented by Microsoft) ......................... 5**7 │
└─────────────────────────────────────────────────────────────────────────────┘
* DOS Idle Interrupt
Int 28h has been provided by DOS since release 2.0. The int 28h process is
similar to the "Timer Tick" process provided by BIOS via int 1Ch in that it is
an "outbound" (from DOS) call which an application can "hook onto" to get
service at a particular entry point. DOS normally only issues int 28h when it
recieves a function call (int 21h) from a foreground application with an
argument in the range of 0 thru 12 (0Ch) in the AH register, or when it is
idling waiting for keyboard input. In effect, when DOS issues int 28h, it is
saying to the background task "I'm not doing anything hot right now, if you can
use the time, go ahead." This means that a foreground application which doesn't
do many low-number DOS functions can preempt CPU time easily.
When int 28h is being issued it is usually safe to do DOS calls. You won't get
int 28hs if a program is running that doesn't do its keyboard input through
DOS. You should rely on the timer interrupt for these. It is used primarily by
the PRINT.COM routines, but any number of other routines can be chained to it
by saving the original vector and calling it with a FAR call (or just JMPing to
it) at the end of the new routine.
Int 28h is not called at all when any non-trivial foreground task is running.
As soon as a foreground program has a file open, int 28h no longer gets called.
Could make a good driver for for a background program that works as long as
there is nothing else going on in the machine.
DOS uses 3 separate internal stacks: one for calls 01h through 0Ch; another
for calls 0Dh and above; and a third for calls 01h through 0Ch when a Critical
Error is in progress. When int 28h is called, any calls above 0Ch can be
executed without destroying the internal stack used by DOS at the time.
The byte which is pushed on the stack before an int 28h just indicates which
stack area is being used by the current int 21h call. In DOS 3.1, the code
sequence that calls int 28h looks like this:
PUSH SS:[0304]
INT 28
POP SS:[0304]
The low-order byte of the word pushed contains 1 if the int 21h call currently
in progress is for services 1 through 0Ch, and 0 for service 0 and for 0Dh and
up. Assuming that the last DOS call was not a reentrant one, this tells you
which set of DOS services should be safe to call.
entry no parameters available
return none
note 1) The int 28h handler may invoke any int 21h function except functions
00h through 0Ch (and 50h/51h under DOS 2.x unless DOS CritErr flag is
set).
2) Apparently int 28h is also called during screen writes.
3) Until some program installs its own routine, this interrupt vector
simply points to an IRET opcode.
4) Supported in OS/2 1.0's DOS Compatibility Box.
5) It is possible, if you are careful, to enhance the background priority
by providing more int 28h calls than DOS normally would issue.
6) If the InDOS flag is zero on int 28h, then it was called by someone
other than DOS, and the word on the stack should NOT be examined.
7) From Quarterdeck Tech Support: "Turbo Pascal 4.0 uses int 28h as a
convenience for its SideKick product users. Interrupt 28 is the DOS
busy flag which DESQview treats as a pause and gives up time...
foreground gets little time and background gets a lot...reverse of
normal."
8) This interrupt is supported by PC-MOS/386 and MS Windows 3.0+.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 29h (not documented by Microsoft) ......................... 5**8 │
└─────────────────────────────────────────────────────────────────────────────┘
* Internal - Quick Screen Output
This method is extremely fast (much faster than DOS 21h subfunctions 2 and 9,
for example), and it is portable, even to "non-compatible" MS-DOS computers.
entry AL ASCII value for character to output to screen
return unknown
note 1) Documented by Digital Equipment's DOS Reference as provided with the
DEC Rainbow. Also documented by Digital Research in the DR-DOS manual.
2) If ANSI.SYS is installed, character output is filtered through it.
3) Works on the IBM PC and compatibles, Wang PC, HP-150 and Vectra, DEC
Rainbow, NEC APC, Texas Instruments PC and others.
4) This interrupt is called from the DOS's output routines if output is
going to a device rather than a file, and the device driver's attribute
word has bit 3 (04h) set to "1".
5) This call has been tested with MSDOS 2.11, PCDOS 2.1, PCDOS 3.1, PCDOS
3.2, PCDOS 3.3, PCDOS 4.01, and Compaq DOS 3.31.
6) Used in IBMBIO.COM as a vector to int 10, function 0Eh (write TTY)
followed by an IRET.
7) Most of the fast ANSI device drivers use this interrupt - ZANSI.SYS,
NANSI.SYS, and PCMag's ANSI.COM, Quarterdeck's DVANSI.SYS.
8) When using int 29h to output characters the ASCII 7 (BELL) will
suppress character output while the bell is sounding.
9) When device drivers (or the SYSINIT module which loads the drivers)
need to do console output, they use int 29h, to call the console device
driver directly. For example, messages telling you about errors in your
CONFIG.SYS file are printed using this service.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 2Ah Microsoft Networks - Session Layer Interrupt .......... 5**9 │
└─────────────────────────────────────────────────────────────────────────────┘
1) This interrupt was not officially documented by Microsoft
until the release of Windows 3.0, which has setup parameters
for int 2Ah.
2) LANtastic NetBIOS interface, original IBM PC LAN interface.
3) NetBIOS alternate interface. The alternate interface (2Ah) was
originally designed as a "higher" level interface to network
communications rather than the "low" level interface (5Ch)
provided by the NETBIOS. The 2Ah interface, however, does not
support any higher level functions than does the 5Ch interface
and therefore has not become a de facto standard as has the 5Ch
interface.
4) Most DOS 4.0 external programs (SHARE, etc) check this
interrupt during installation.
entry AH 00h Check for Int 2Ah Network BIOS Installation
return AH nonzero if installed
01h Execute NETBIOS Request (no error retry)
ES:BX pointer to NCB
return AL NETBIOS error code
AH 00h if no error
01h if error
02h Set Net Printer Mode
03h Get Shared-Device Direct I/O Status
AL 00h
DS:SI pointer to ASCIIZ disk device name
return CF clear if allowed
set if denied
note 1) Direct I/O is through ints 13h, 25h, or 26h.
2) If the device is redirected (see int 21h/5F02h)
or this call returns with carry set, the program
should not perform direct disk I/O.
3) The device pointed to by DS:SI must include the
colon in the drive:pathname.
4) It may take some time for this call to return
to the calling program. Do not use in time-
sensitive applications.
04h Execute NETBIOS
AL 00h retry on error
01h no retry on error
ES:BX pointer to network control block
return AX 0000h for no error
AH 01h if error
AL error code (unknown)
note 1) IBM PC LAN says, "for adapter independence,
use int 2Ah. No not use 5Ch function provided
by the network adapter."
2) Error codes that are automatically retried are:
09h no session resources available
12h session open rejected
21h interface busy
05h Get Network Resource Information
AL 00h
return AX reserved
BX # of network names (16 - names in use)
CX number of available NCB commands
DX number of sessions (max - pending)
06h Network Print-Stream Control
(IBM PC LAN)
AL 01h Set spooled output to concatenation mode
02h Set spooled output to truncation mode
03h Trunate printer stream
return CF clear no error
set AX DOS error code
(LANtastic)
AL 01h Set spooled output to combined mode
return none
02h Set spooled output in separate mode
return none
note Printer output is not combined when
multiple programs are run or when the
printer is opened or closed. This cmd.
implicitly starts a new print job.
03h Flush printer output
return none
note 1) Printer output is flushed and a new
print job is started. If no output
exists to be flushed then this function
has no affect.
2) 03h is equivalent to Ctrl/Alt/keypad-*
note NETBIOS 1.10
07h-19h unknown
20h unknown
note AL=01h intercepted by DESQview 2.0.
23h Receive Broadcast Datagram
IBM PC LAN 1.2. Manual says "use is not allowed".
80h Begin DOS Critical Section
AL critical section number (1 to 6)
note SHARE.EXE uses critical section number 01h.
81h End DOS Critical Section
AL critical section number (1 to 6)
note SHARE.EXE uses critical section number 01h.
82h Server Hook
stack AX from call to int 21h
return stack unchanged
note Called by the int 21h function dispatcher
in DOS 3.10+ for function 0 and functions
greater than 0Ch except 59h.
84h Keyboard Busy Loop
note Same functionality as DOS's int 28h?
87h Used by DOS PRINT to mark Critical Regions:
AL 00h Begin Critical Region
01h End Critical Region
return CF set region already active
0A3h Receive Broadcast Datagram
IBM PC LAN 1.2. Manual says "use is not allowed".
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 2Bh (not documented by Microsoft) ......................... 5**10│
└─────────────────────────────────────────────────────────────────────────────┘
* Unknown - Internal Routine for DOS (IRET)
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 2Ch (not documented by Microsoft) ......................... 5**11│
└─────────────────────────────────────────────────────────────────────────────┘
* Unknown - Internal Routine for DOS (IRET)
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 2Dh (not documented by Microsoft) ......................... 5**12│
└─────────────────────────────────────────────────────────────────────────────┘
* Unknown - Internal Routine for DOS (IRET)
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 2Eh (undocumented by Microsoft) (DOS 2.0+) ............... 5**13│
└─────────────────────────────────────────────────────────────────────────────┘
* Internal Routine for DOS (Alternate EXEC)
This interrupt passes a command line addressed by DS:SI to COMMAND.COM. The
command line must be formatted just like the unformatted parameter area of a
Program Segment Prefix. That is, the first byte must be a count of characters,
and the second and subsequent bytes must be a command line with parameters,
terminated by a carriage return character.
When executed, int 2Eh will reload the transient part of the command
interpreter if it is not currently in memory. If called from a program that
was called from a batch file, it will abort the batch file. If executed from a
program which has been spawned by the EXEC function, it will abort the whole
chain and probably lock up the computer. Int 2Eh also destroys all registers
including the stack pointer.
Int 2Eh is called from the transient portion of the program to reset the DOS
PSP pointers using the above Functions #81 & #80, and then reenters the
resident program.
When called with a valid command line, the command will be carried out by
COMMAND.COM just as though you had typed it in at the DOS prompt. Note that the
count does not include the carriage return. This is an elegant way to perform a
SET from an application program against the master environment block for
example.
entry DS:SI pointer to an ASCIIZ command line in the form:
count byte
ASCII string
carriage return
null byte
note 1) Destroys all registers including stack pointer.
2) Seems to work OK in both DOS 2.x and 3.x.
3) It is reportedly not used by DOS.
4) As far as known, int 2Eh is not used by DOS 3.1, although it was called
by COMMAND.COM of PCDOS 3.0, so it appears to be in 3.1 only for the
sake of compatibility.
5) Not used by the aftermarket 4DOS command interpreter prior to version
3.0. 3.0 merely hooks this vector and does nothing with it. 3.02 and
later provide a TSR to add 2Eh capability.
6) Trapped by PC-MOS/386 to prevent illegal entry into the command
processor.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 2Fh Multiplex Interrupt ................................... 5**14│
└─────────────────────────────────────────────────────────────────────────────┘
Interrupt 2Fh is the multiplex interrupt. A general interface is defined
between two processes. It is up to the specific application using interrupt
2Fh to define specific functions and parameters.
This interrupt is becoming more commonly used as the available interrupt 21
functions are getting to be in short supply. Int 2Fh doesn't require any
support from DOS itself for it to be used in application programs. It's not
handled by DOS, but by the programs themselves.
Every multiplex interrupt handler is assigned a specific multiplex number.
The multiplex number is specified in the AH register; the AH value tells which
program your request is directed toward. The specific function that the handler
is to perform is placed in the AL register. Other parameters are places in the
other registers as needed. The handlers are chained into the 2Fh interrupt
vector and the multiplex number is checked to see if any other application is
using the same multiplex number. There is no predefined method for assigning a
multiplex number to a handler. You must just pick one. To avoid a conflict if
two applications choose the same multiplex number, the multiplex numbers used by
an application should be patchable. In order to check for a previous
installation of the current application, you can search memory for a unique
string included in your program. If the value you wanted in AH is taken but
you don't find the string, then another application has grabbed that location.
Int 2Fh was not documented under DOS 2.x. There is no reason not to use int 2Fh
as the multiplex interrupt in DOS 2.x. The only problem is that DOS 2.x does not
initialize the int 2Fh vector, so when you try to chain to it like you are
supposed to, it will crash. If your program checks the vector for being zero
and initializes it itself or doesn't chain in that case, it will work for you
n 2.x just the same as 3.x.
DOS 3.2 itself contains some int 2Fh handlers - it uses values of 08h, 13h,
and 0F8h. There may be more. NLSFUNC from DOS 3.3 up uses part of int 2Fh and
so does GRAFTABL.
For int 2Fh calls, register AH identifies which program is to handle the
interrupt. AH values 00h-7Fh are reserved for DOS, not that anyone cares much.
Values 0C0h-0FFh are reserved for applications. Register AL contains the
subfunction code if used.
IBM has reported that PC-DOS 4.0 will sometimes hang when substituting int
2Fh for int 67h for network calls. Most of DOS 4.0's external commands check
the 2Fh PRINT and other statuses while operating for enhanced network support.
DOS 4.0 SHARE.EXE traps the 2Fh interrupt. IBM and Microsoft DOS programming
information for versions prior to 4.0 strongly imply that 2Fh functions not
used by PRINT.COM are open for general use. DOS 4.0 uses quite a few 2Fh
functions and this may be a cause of incompatibility with some software.
LANtastic NOS SERVER.EXE v2.49s and earlier will not run under DOS 4.x due
to int 2Fh conflicts. This conflict also occurs under DR-DOS versions 3.40 and
3.41. DR-DOS is internally similar to DOS 4.0.
Function 01h PRINT.COM
PC-DOS 3.3's PRINT.COM hooks the following interrupt vectors:
05h PrintScreen Interrupt
13h BIOS Disk Interrupt
14h BIOS Serial Communications Interrupt
15h BIOS "System Services" Interrupt
17h BIOS Printer Interrupt
19h Bootstrap Loader Interrupt
1Ch Timer Tick
23h Control-C Terminate Address
24h Critical Error Handler Address
28h DOS Idle Interrupt (undocumented)
2Fh Multiplex Interrupt
entry AH 01h
AL 00h PRINT Get Installed State
This call must be defined by all int 2Fh handlers. It
is used by the caller of the handler to determine if
the handler is present. On entry, AL=0. On return, AL
contains the installed state as follows:
return AL 0FFh installed
01h not installed, not OK to install
00h not installed, OK to install
01h PRINT Submit File
DS:DX pointer to submit packet
format byte level
dword pointer to ASCIIZ filename
return CF set if error
AX error code
note 1) A submit packet contains the level (BYTE) and a pointer
to the ASCIIZ string (DWORD in offset:segment form).
The ASCIIZ string must contain the drive, path, and
filename of the file you want to print. The filename
cannot contain global filename characters.
return CF set if error
AX error code
02h PRINT Cancel File
On entry, AL=2 and DS:DX points to the ASCIIZ string for
the print file you want to cancel. Global filename
characters are allowed in the filename.
DS:DX pointer to ASCIIZ file name to cancel (wildcards OK)
return CF set if error
AX error code
03h PRINT Remove All Files
return CF set if error
AX error code
04h PRINT Hold Queue/Get Status
This call holds the jobs in the print queue so that you
can scan the queue. Issuing any other code releases the
jobs. On entry, AL=4. On return, DX contains the error
count. DS:SI points to the print queue. The print queue
consists of a series of filename entries. Each entry is
64 bytes long. The first entry in the queue is the file
currently being printed. The end of the queue is marked
by the entry having a null as the first character.
return DX error count
DS:SI pointer to print queue (null-string terminated
list of 64-byte ASCIIZ filenames)
CF set if error
AX error code
01h function invalid
02h file not found
03h path not found
04h too many open files
05h access denied
08h queue full
09h spooler busy
0Ch name too long
0Fh drive invalid
05h PRINT release print jobs
return none
note 1) This call has no parameters.
2) Restarts the print queue. This call must be called
to restart the current print job or after calling
function 04h to pause the print job.
06h PRINT get printer device (DOS 3.3+)
return CF clear OK
AX 0000h
CF set
AX 0008h (ERROR_QUEUE_FULL)
DS:SI pointer to printer device header
struc.
note 1) This call has no parameters.
2)
Function 05h DOS 3.0+ Critical Error Handler
entry AH 05h
AL 00h Installation Check
return AL 00h not installed, OK to install
01h not installed, not OK to install
0FFh installed
note This set of functions allows a user program to
partially or completely override the default
critical error handler in COMMAND.COM.
AL xxh Handle Error - nonzero error code in AL
(xxh indicates nonzero extended error code)
return CF clear
ES:DI pointer to ASCIIZ error message
AL (?)
CF set use default error handler
for LANtastic LANOS:
entry AH 05h
AL 00h for installation check
# for error code (in pre DOS 4.00)
1 or 2 for error code in DOS 4.00
BX in Error code
return CF clear if error code converted to text
set if error code can't be converted
ES:DI pointer to ASCIIZ text buffer containing error text. This is a
read-only text buffer and you must not alter the text in this
buffer.
Function 06h ASSIGN
entry AH 06h
AL 00h Installation Check
01h Get Memory Segment
return (AH=00h) AL (to 4.01) nonzero if ASSIGN is installed
(5.0) 0FFh if ASSIGN is installed
(AH=01h) ES segment of ASSIGN work area
note 1) Many references report the return value in AH, but this call appears
to return its information in AL.
2) Microsoft Press' "Advanced MSDOS Programming" (Second Edition)
documents int 2Fh, AX=2000 to check for ASSIGN, but according to
Ray Duncan (the author) this is a typo.
Function 08h DRIVER.SYS
entry AH 08h
AL 00h Installation Check
return AL 00h not installed, OK to install
01h not installed, not OK to install
0FFh installed
01h Add New Block Device
DS:DI pointer to device driver header
note Moves down list of drivers, copying and modifying word
at offset 29h. Device driver appended to driver chain.
02h Execute Device Driver Request
ES:BX pointer to device driver request header
return Request header updated as per requested operation.
Function 10h SHARE (DOS 3.0+)
entry AH 10h
AL 00h Installation Check
return AL 00h not installed, OK to install
01h not installed, not OK to install
0FFh installed
note 1) Values of AL other than 00h appear to put DOS 3.3 SHARE into an
infinite loop.
2) PC-MOS/386 will always report SHARE.EXE as being present, as its
functions are duplicated within the PC-MOS/386 kernel.
3) If DOS 4.0's SHARE is loaded manually, either in the CONFIG or AUTOEXEC
file, it can't access the NUL device if 4DOS 3.x is installed. If
SHARE.EXE is in the root, the problem doesn't usually occur. It's been
reported that 4DOS is not the only program that has problems with
SHARE.EXE and the NUL device, so it's more likely to be an MS-DOS
problem than a 4DOS problem. (dgh on BIX)
4) MS Windows intercepts this call and always returns nonzero regardless
of SHARE's presence. If your program uses file sharing you should
try locking and reading a file and watch for the error codes returned
by int 21h/5Ch. (Lock/Unlock File)
5) SHARE function is built into DR-DOS 3.4x, but was removed to a
separate TSR module in 5.0 and 6.0.
Function 14h NLSFUNC.COM
entry AH 14h
AL 00h installation check
return AL 00h not installed, OK to install
01h not installed, not OK to install
0FFh installed
01h unknown
note Calls int 2Fh/1227h under certain circumstances.
02h unknown
note Calls int 2Fh/1227h under certain circumstances.
03h unknown
note In DOS 3.3, appears to be identical to subfunction 01h.
other parameters unknown
Function 15h CD-ROM extensions
Microsoft CD-ROM driver versions 1.0 through 2.0 will work
only up to DOS 3.31. DOS 4.0 and up require 2.1 drivers.
MSCDEX abandons INT 13; and redirection within DOS to do its
work. Some LAN software, such as LANtastic, uses the same
mechanism to implement network drives. MSCDEX provides IFS
functionality in any version of DOS back to 3.0.
entry AH 15h CD-ROM services
AL subfunctions
00h Get Number of CD-ROM Drives (Installation Check)
BX 00h
return BX number of CD-ROM drive letters used
0000h MSCDEX not installed
CX starting drive letter (0=A:, 1=B:, etc)
note This installation check does not follow the format used
by other software.
01h Get Drive Device List
ES:BX pointer to buffer to hold drive letter list
(5 bytes per drive letter)
return buffer filled, for each drive letter:
byte subunit number in driver
dword address of device driver header
02h Get Copyright File Name
CX drive number (0=A:)
ES:BX pointer to 38-byte buffer for name of copyright file
return CF set if drive is not a CD-ROM drive
AX error code (15h)
03h Get Abstract File Name
ES:BX pointer to 38-byte buffer for name of abstract file
CX drive number (0=A:)
return CF set if drive is not a CD-ROM drive
AX error code (15h)
04h Get Bibliographic Doc File Name
CX drive number (0=A:)
ES:BX pointer to 38-byte buffer for name of bibliographic
documentation file
return CF set if drive is not a CD-ROM drive
AX error code (15h)
05h Read VTOC (Volume Table of Contents)
CX drive number (0=A:)
DX sector index (0=first volume descriptor, 1=second,...)
ES:BX pointer to 2048-byte buffer
return CF set on error
AX error code (15h, 21h)
CF clear if successful
AX volume descriptor type
00h other
01h standard
0FFh terminator
06h Turn Debugging On
BX debugging function to enable
note Reserved for development.
07h Turn Debugging Off
BX debugging function to disable
note Reserved for development.
08h Absolute Disk Read
CX drive number (0=A:)
DX number of sectors to read
ES:BX pointer to buffer
SI:DI starting sector number
return CF set on error
AL error code (15h, 21h)
09h Absolute Disk Write
CX drive number (0=A:)
DX number of sectors to write
ES:BX pointer to buffer
SI:DI starting sector number
note Corresponds to int 26h and is currently reserved and
nonfunctional.
0Ah Reserved by Microsoft
0Bh CD-ROM 2.00 - Drive Check
CX drive number (0=A:)
return BX 0ADADh if MSCDEX.EXE installed
AX 0000h if drive not supported
<>0 if supported
0Ch CD-ROM 2.00 - Get MSCDEX.EXE Version
return BH major version
BL minor version
note MSCDEX.EXE versions prior to 1.02 return BX=0.
0Dh CD-ROM 2.00 - Get CD-ROM Drive Letters
ES:BX pointer to buffer for drive letter list
(1 byte per drive)
return Buffer filled with drive numbers (0=A:). Each byte
corresponds to the drive in the same position for
function 1501h.
0Eh CDROM 2.00 - Get/Set Volume Descriptor Preference
BX subfunction
00h Get Preference
DX 0000h
return DX preference settings
01h Set Preference
DH volume descriptor preference
01h primary volume descriptor
02h supplementary volume descriptor
DL supplementary volume descriptor preference
01h shift-Kanji
CX drive number (0=A:)
return CF set on error
AX error code (01h, 15h)
0Fh CD-ROM 2.00 - Get Directory Entry
CX drive number (0=A:)
ES:BX pointer to ASCIIZ pathname
SI:DI pointer to 255-byte buffer for directory entry
return CF set on error
AX error code
CF clear if succesful
AX disk format (0=High Sierra, 1=ISO 9660)
note Directory entry format:
byte length of directory entry
byte length of XAR in LBN's
dword LBN of data, Intel (little-Endian) format
dword LBN of data, Motorola (big-Endian) format
dword length of file, Intel format
dword length of file, Motorola format
---High Sierra---
6 bytes date and time
byte bit flags
byte reserved
---ISO 9660---
7 bytes data and time
byte bit flags
---both formats---
byte interleave size
byte interleave skip factor
word volume set sequence number, Intel format
word volume set sequence number, Motorola format
byte length of file name
n bytes file name
byte (optional) padding if filename is odd length
n bytes system data
Error codes:
01h invalid function
15h invalid drive
21h not ready
Function 16h MS-DOS Idle Call (DOS 5.0+, OS/2 2.0, Windows 3.0+)
entry AH 16h idle call
AL 80h
return AL 00h idle call is supported
nonzero idle call is not supported
note 1) When your program is waiting for user input or otherwise not doing
useful work, you can call this function in a loop. Properly written
background programs can monitor this call to determine if it is safe
to do processing. This call originated in Windows 3.0, then the
OS/2 2.0 DOS box, and finally in DOS 5, where DOSSHELL uses it so
processes can tell the shell when it is safe to swap tasks.
The MS 5.0 Technical Reference recommends making sure the int 2Fh
vector is nonzero before calling this function. This would be to
ensure you are running a DOS version that has 2Fh support.
This call is nonblocking, that is, the system does not suspend the
program unless another program is ready to run. Usually the call
returns immediately and the program continues running.
Function 1Ah ANSI.SYS (DOS 4.0+)
entry AH 00h Installation Check
return AL 00h not installed
0FFh if installed
01h Get/Set Display Information
CL 5Fh set information
7Fh get information
DS:DX pointer to parm block as for int 21h,
AX=440Ch, CX=037Fh/035Fh respectively
return CF set on error
AX error code (unknown)
clear if successful
note 1) AX is destroyed.
2) May be the DOS IOCTL interface to ANSI.SYS.
Function 1Bh XMA2EMS.SYS (DOS 4.0+)
entry AH 00h Installation Check
return AL 0FFh if installed
01h Get Hidden Frame Information
DI hidden physical page number
return AX 0000h if successful
ES segment of page frame
DI physical page number
0FFFFh if failed (no such hidden page)
note 1) XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
This extension hooks onto int 67h fn58h and returns from that call data
which excludes the physical pages being used by DOS.
2) Fn 02h corresponds to the data edited out of the int 67h/fn 58h call.
Function 43h Microsoft Extended Memory Specification (XMS)
The XMS version 2.00 for MS-DOS allows DOS programs to utilize
additional memory found in 80286 and 80386 machines. With some
restrictions, XMS adds about 64K to the 640K which DOS programs
can access directly. XMS also provides DOS programs with a
standard method of storing data in extended memory.
See Chapter 10 for API.
Function 48h DOSKEY.COM (DOS 5.0+)
entry AH 48h DOSKEY.COM
AL 00h Get Installed State
return AL 00h not installed
0FFh installed
AL 10h Read Command Line
DS:DX pointer to buffer to take the command line
buffer:
offset description
00h buffer size (max 128 bytes)
01h the number of characters, minus 1. The final
CR is copied to the buffer but not included in
the byte count.
02h the first byte of the input line.
return AX 0000h
DS:DX filled with command line
note AX=0 if the user types a macro name, and the buffer is not filled.
Your program must call the function a second time to expand the macro
and copy the macro text to the buffer.
Function 4Ah DOS 5.0 HMA Services (undocumented)
entry AH 4Ah
AL 01h Get Size
return BX number of bytes (possibly 0) of available HMA
ES:DI start of the available HMA
Function 64h SCRNSAV2
entry AH 64h
AL 00h installation check
return AL 00h not installed
0FFh installed
note SCRNSAV2.COM is a screen blanker for PS/2s with VGA by Alan Ballard.
Function 7Ah Novell NetWare
entry AH 7Ah
AL 00h installation check
return AL 00h not installed
0FFh installed
ES:DI pointer to FAR entry point for routines otherwise accessed
through int 21h
note 1) Returns address of entry point for IPX and SPX.
2) Parameters are listed in Chapter 13.
Function 87h APPEND
entry AH 87h
AL 00h APPEND installation check
return AH <> 0 if installed
01h APPEND - unknown
02h APPEND - version check
return unknown
Function 88h Microsoft Networks
entry AH 88h
AL 00h network program installation check
return AH <> 0 if installed
BX installed component flags (test in this order!)
bits 2 messenger
3 redirector
6 server
7 receiver
other bits not used, do not test
01h unknown
02h unknown
03h get current POST address
return ES:BX POST address
04h set new POST address
ES:BX new POST address
09h network version check
Function 89h WHOA! (slows system down for games)
entry AH 89h
AL 00h installation check
return AL 00h not installed
0FFh installed
01h uninstall
return AL 0FDh successful
0FEh error
02h set delay count
BX = delay count (larger values slow system down more)
return AL 0FDh successful
0FEh error
note WHOA!.COM is copyright COMPUTE! Publications and Brad Crandall.
Function 0AAh VIDCLOCK.COM
entry AH 0AAh
AL 00h installation check
return AL 00h not installed
0FFh installed
note VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III.
Function 0ADh KEYB.COM (DOS 3.3+)
entry AH 0ADh
AL 80h Get KEYB.COM Version Number
return
BX 00h not installed
nonzero installed
BH major version number
BL minor version number
---
AL 81h Set KEYB.COM Active Code Page
BX code page ID
437 USA
850 Multilingual (Latin I)
852 Multilingual (Latin II)
860 Portuguese
863 French-Canadian
865 Nordic
return CF clear successful
set
AX 0001h if code page is not valid
---
AL 82h Set KEYB.COM Country Flag
BL 00h domestic (USA) keyboard
0FFh not USA keyboard
return CF clear successful
set invalid value was passed in BL
---
AL 83h Get KEYB.COM Country Flag
return BL current country flag value (should be 00h or 0FFh)
note Some of these functions are available in DOS 3.3 and 4.0, but were
not documented. These descriptions are for DOS 5.0.
Function 0B0h GRAFTABL.COM (DOS 3.3+)
entry AH 0B0h
AL 00h installation check
return AL 00h not installed, OK to install
0FFh installed
note 1) Also used by DISPLAY.SYS.
Function 0B7h APPEND.EXE (DOS 3.3+)
entry AH 0B7h
AL 00h installation check
return AH 00h not installed
nonzero installed (3.3-4.0)
0FFh installed (5.0)
01h unknown
02h version check
return AH minor version number, otherwise
AL major version number
note The MS 5.0 TR reports AX should be 0FFFFh for versions
compatible with DOS 5.0. However, DOS 4.0 returns
the same value.
03h unknown
04h get APPEND directory list address (DOS 4.0+)
return ES:DI pointer to active APPEND path (128 bytes max)
in ASCIIZ format
05h unknown
06h get APPEND modes flag (DOS 4.0+)
return BX APPEND state
bits 0 set if APPEND enabled
1-B reserved, must be zero
C appends dirs to file requests that
already specify a drive
D applies dirs to file requests that
already specify a PATH. Set if /PATH
flag active
E stores the appended dirs in the APPEND
environment variable. Set if /E flag
active
F applies dirs to functions like EXEC
(21h/4B00h) or FIND FIRST (21h/4Eh).
Set if /X flag active.
note Returns the current operation modes for APPEND.
07h set APPEND modes flag (DOS 4.0+)
BX APPEND state bits (see 06h)
return none
08h unknown
09h unknown
0Ah unknown
10h unknown
11h set TRUENAME flag (DOS 4.0+)
note 1) This call has no parameters.
2) If the next int 21h call is function 3Dh, 43h, 4Eh or
6Ch, the fully qualified filename is written over top
of the filename passed to the int 21h call. The
application must provide a sufficiently large buffer.
This state is reset after APPEND processes the call.
note 1) (4.0+) The full path name can be retrieved by doing a int 2Fh fn 0B711h
before an open (int 21h 3Dh or 6Ch). The full path is put in your
ASCIIZ string when you do the open, so be sure it is long enough.
2) The APPEND command apparently covers parts of int 21h/6Ch even though
Microsoft's 4.01 User's Reference says it covers only 0Fh, 23h, 2Dh,
11h, 4Eh & 4Bh, some of those do require special switches. For 6Ch, it
may be a function of the DX register. If DX=xx1x it looks only in the
current directory, if DX=xx0x it will search the full append path. DX
is called the open flag and gives what action to take if the file exits
or does not exist.
Function 0B8h Network
entry AH 0B8h
AL 00h installation check
return AH 00h not installed
<>0 installed
BH 00h
BL installed component flags (test in this order
bits 0000100 server according to PC-LAN)
0000100 messenger
0100000 receiver
1000000 redirector
(LANtastic) return AL 00h neither redirector or server installed
0FFh redirector or server installed
BL bits indicating which software is installed
(both will be set when both software is running)
01000000b server is installed
00001000b redirector is installed
01h unknown
02h unknown
03h get current POST address
return ES:BX POST address
04h set new POST address
ES:BX new POST address
note 1) When a POST address is set, it gets control on any
network event (message-received or network error).
2) Inputs to Message-Received Event Handler
entry AH 00h
AL 00h single block message
DS:SI pointer to ASCIIZ originator name
DS:DI pointer to ASCIIZ destination name
ES:BX pointer to text header
entry AH 00h
AL 01h start multiple block message
DS:SI pointer to ASCIIZ originator name
DS:DI pointer to ASCIIZ destination name
CX block group identifier
entry AH 00h
AL 02h multiple block text
CX block group identifier
ES:BX pointer to text header
entry AH 00h
AL 03h end multiple block message
CX block group identifier
entry AH 00h
AL 04h message aborted due to error
CX block group identifier
entry AH 00h
AL 04h message aborted due to error
CX block group identifier
entry AH 00h
AL 04h message aborted due to error
CX block group identifier
return AL 00h user POST routine processed the message
01h the network will process the message
0FFh network will process message, but
message window will not be displayed
2) Inputs to Network Critical Error Handler
entry AH 01h
AL 01h server received badly formatted
network request
return 0FFh network will process the error
entry AH 01h
AL 02h unexpected network error
return 00h user POST routine handled error OK
01h reissue network control block
0FFh network will process the error
entry AH 01h
AL 03h server got DOS int 24h error
return 00h user POST routine handled error OK
0FFh network will process the error
3) Use an IRET to return from POST handler.
4) For multiple block messages, the application must
respond with the same AX value for all message blocks
in a single message group.
5) Text header format:
DW length ;length of text
DB length dup(?) ;text of message
6) Network event handlers should not user DOS FCB calls,
attempt to allocate memory, or terminate a running app.
05h unknown
06h unknown
07h unknown
08h unknown
09h version check
return AH major version number
AL minor version number
note The version numbers are returned in hexadecimal. For
example, version 2.52 would be:
AH 2
AL 34h (52 decimal)
Function 0C7h Artisoft LANtastic AI-LANBIOS
note This is the default entry point for the LANtastic NOS serial and
parallel port drivers.
Function 0D44Dh 4DOS v3.01,+ Command Interpreter (COMMAND.COM replacement)
entry AX 0D44Dh 4DOS installation check
return If 4DOS is present in memory the following values will be returned:
AX 44DDh
BH minor 4DOS version number
BL major 4DOS version number (same format as DOS int 21h/fn 30h)
CX 4DOS PSP segment address
DL 4DOS shell number (0 for the first shell, 1 for the second,
etc.; incremented each time a new copy of 4DOS is loaded over a
root copy, either in a different multitasker window or via
nested shells)
note 1) (excerpted from 4DOS 3.01 manual)
4DOS now generates two different INT 2F calls to allow TSRs to
tell when 4DOS is back at the prompt. These calls have AX =
D44Eh. The first occurs immediately before displaying the
prompt, with BX = 0; the second occurs after displaying the
prompt and immediately before accepting keyboard input, with BX =
1. Any routine intercepting these calls should preserve at least
the SI, DI, BP, SP, DS, ES, and SS registers.
2) This function (440Dh) is only available in swapping mode. It tells you
if 4DOS is loaded in memory, but not whether it is the parent
process of your program. You can determine if 4DOS is the parent
process by comparing the PSP value returned in CX to the PSP
chain pointer at offset 16h in your program's PSP.
Function 0E3h AnarKey (keyboard command stack and alias program)
entry AH 0E3h
AL 00h installation check
return AL 00h not installed
0FFh installed
note (excerpted from the AnarKey documentation)
Upon installation, ANARKEY hooks into two interrupts:
1) Interrupt used to install program signature
-DOS versions before 3.1 use one interrupt between 60h-67h
-DOS 3.1 and later use interrupt 2Fh
2) Interrupt 21h, function 0Ah
Upon initial program execution, a program "signature" is installed which
is used by ANARKEY to prevent itself from being installed more than
once. Depending upon the DOS version, a different method of signature
installation is performed.
Under DOS 2.x thru 3.0, ANARKEY scans interrupt vectors 60h thru 67h
searching for an unused vector (signified by a null value). If an
unused vector is found, ANARKEY takes it and installs its program
signature there. If all the vectors are in use, ANARKEY does not
install a program signature.
Running DOS 3.1 and later, ANARKEY chains into interrupt 2Fh. By
default, ANARKEY appropriates process number 0E3h.
Function 0F7h AUTOPARK.COM (PD TSR hard disk parking utility)
entry AH 0F7h
AL 00h installation check
return AL 00h not installed
0FFh installed
01h set parking delay
BX:CX 32 bit count of 55ms timer ticks
note AUTOPARK is a TSR HD parker by Alan D. Jones.
Function Intel Communicating Applications Standard (CAS 1.01A)
entry AH (default; CAS multiplex number can be user-adjusted)
AL 00h Get Installed State
return AL 00h not installed
01h not installed, not OK to install
0FFh installed
note No errors are returned.
01h Submit a Task
DS:DX ptr to ASCIIZ path and name of Task Control File
return AX positive event handle or neg. error code
note Files associated with a task must stay in
existence until the task is complete or an
error will result.
02h Abort the Current Event
return AX event handle of aborted event or
negative error code
note Terminating an event is not instantaneous. It
might take up to 30 seconds.
03h reserved
04h reserved
05h Find First Entry in Queue
CX Status of the event you are seeking. This value
is compared with the field at offset 2 of the
Control File
0 - event has successfully completed
1 - event is waiting to be processed
2 - number has been dialed
3 - connection has been made (sending)
4 - connection has been made (receiving)
5 - event was aborted
-1 - chooses an event without regard to status
This value will probably be used most often
Other negative values match error codes in
Control File.
DH direction:
0 - Search forward chronologically (from the
first to the last occurring event)
1 - Search backward chronologically (from the
last to the first occurring event)
DL queue to search:
0 - Find first control file in Task Queue
1 - Find first control file in Receive Queue
2 - Find first control file in Log Queue
return AX 0, if successful, or negative error code
BX event handle for this file
06h Find Next Entry in Queue
DL queue to search:
0 - Find next control file in Task Queue
1 - Find next control file in Receive Queue
2 - Find next control file in Log Queue
return AX 0, if successful, or negative error code
BX event handle for this file
07h Open a File
BX event handle
CX receive file number
0 - the Receive Control File
1 - first received file
2 - second received file
3 - third received file
n - nth received file
DL queue:
0 - open control file in Task Queue
1 - open control file in Receive Queue or the
received data
file specified in the CX register.
2 - Open control file in Log Queue.
return AX 0 if successful, or negative error code
BX DOS file handle for the requested file
08h Delete a File
BX event handle
CX receive file number
0 - delete all files associated with a specific
Receive Control File (including the RCF)
1 - delete first received file associated with
the event handle
2 - delete the second received file associated
with the event handle.
n - delete the nth received file associated with
the event handle
DL queue:
0 - delete control file in Task Queue
1 - delete a file or files associated with an
event in the Receive Queue.
2 - delete control file in Log Queue
note It is strongly recommended that this
function NOT be used to delete individual
Log Control Files to maintain the integrity
of the log.
return AX 0 if successful, or negative error code
09h Delete All Files (in a queue)
DL queue:
0 - delete all control files in the Task Queue
1 - delete all control files in the Receive
Queue and all received files
2 - delete all control files in the Log Queue
return AX 0 if successful or negative error code
0Ah Get Event Date
BX event handle of event whose date you want to get
DL queue:
0 - task queue
1 - receive queue
2 - log queue
return AX 0 if successful or negative error code
CX year (1980-2099)
DH month (1-12)
DL day (1-31)
0Bh Set Task Date
BX event handle
CX year (1980-2099)
DH month (1-12)
DL day (1-31)
return AX 0 if successful or negative error code
0CH Get Event Time
BX event handle
DL queue:
0 - task queue
1 - receive queue
2 - log queue
return AX 0 if successful or negative error code
CH hour (0-23)
CL minutes (0-59)
DH seconds (0-59)
DL 0
0DH Set Task Time
BX event handle
CH hour (0-23)
CL minutes (0-59)
DH seconds (0-59)
DL unused
return AX 0 if successful or negative error code
0EH Get External Data Block
DS:DX points to a 256-byte EDB area
return AX 0 if successful or negative error code
note EDB area is filled with the External Data Block
block format: (values in decimal)
Offset Length Description
0 1 CAS major version number
1 1 CAS minor version number
2 68 ASCIIZ path to directory containing
Resident Manager and CAS software.
The path must end with a backslash
70 13 ASCIIZ name of current phonebook
(the CAS subdirectory is assumed)
83 13 AZCIIZ name of current logo file
(the CAS subdirectory is assumed)
96 32 ASCIIZ default sender name
128 21 ASCIIZ CSID (CCITT fax device ID)
149 107 Reserved
0Fh Get/Set Autoreceive State
DL function code:
0 - get current autoreceive state
1 - set current state to value in DH
DH # rings before answer or 0 to disable
return AX current state or negative error code
0 - Autoreceive disabled
positive # - # rings before hdw answers
10h Get Current Event Status
DS:DX pointer to a 444 byte status area
return AX 0 if successful or negative error code
BX number of the current event (AX=0)
11h Get Queue Status
DL queue:
0 - find status of Task Queue
1 - find status of Receive Queue
2 - find status of Log Queue
return AX # changes to queue since Resident
Manager started or negative error code
If changes exceeds 7FFFH, the count
begins again at 0.
BX current # of Control Files in queue
CX current # of received files
12h Get Hardware Status
DS:DX pointer to a 128-byte status area
return AX 0 if successful, negative if not
DS:DX pointer to filled 128-byte status area
13h Run Diagnostics
DL Mode
0 - report progress of diagnostics
1 - start running diagnostics
return if DL=1, AX=0 or a negative error code.
if DL=0, AX=40h or positive number indicating
diagnostics passed. A negative value
indicates failure and containes the
error code
14h Move Received File
BX event handle
CX receive file number
(must be nonzero to specify a received file)
1 - first received file
2 - second received file
3 - third received file
n - nth received file
DS:DX pointer to new ASCIIZ pathname and filename.
This file must not exist already
return AX 0 if successful or negative error code
note The path to the new directory must exist.
This function cannot create directories.
15h Submit a Single File to Send
DS:DX pointer to variable-length data area
return AX positive event handle or neg. error code
note 1) variable-length data area format:
Offset Length Description
0 1 Transfer type:
0 - 200x200 dpi, facsimile mode
1 - 100x200 dpi, facsimile mode
2 - file transfer mode
3-127 - Reserved.
1 1 Text size (if ASCII file, fax mode)
0 - 80-column
1 - 132-column
2-127 - reserved
2 2 time to send, in DOS file time format
4 2 date to send, in DOS file time format
note: Setting both the time and date
fields to 0 schedules the file to be
sent immediately
6 32 ASCIIZ Destination Name (To: field)
38 80 ASCIIZ pathname of the file to send
118 47 ASCIIZ phone number to call
165 64 ASCIIZ application-specific tag field
229 1 reserved; set to zero
230 1 cover page flag:
0 - don't send cover page
1 - send cover page
2-127 - Reserved
231 23 reserved; set to zero
254 var ASCIIZ cover text (if offset 230=1)
2) The individual fields have the same meaning as
in a Task Control File
3) You must set all fields, except for the Appli-
cation-Specific Tag field, before calling this
function. However, you can set the Destination
Name and Cover Text fields to an empty string
16h-80h Reserved by Intel for future expansion
DOS 2Fh functions 01h (PRINT), 02h (ASSIGN), 10h (SHARE):
return AX Error
Codes Description
01h invalid function number
02h file not found
03h path not found
04h too many open files
05h access denied
06h invalid handle
08h queue full
09h busy
0Ch name too long
0Fh invalid drive was specified
CF clear (0) if OK
set (1) if error - error returned in AX
note 1) The multiplex numbers AH=0h through AH=7Fh are reserved for DOS.
Applications should use multiplex numbers 80h through 0FFh.
2) When in the chain for int 2Fh, if your code calls DOS or if you execute
with interrupts enabled, your code must be reentrant/recursive.
3) Important! In versions of DOS prior to 3.0, the int 2Fh vector was
initialized to zero rather than being pointed into the DOS service area.
You must initialize this vector manually under DOS 2.x.
┌─────────────────────────────────────────────────────────────────────────────┐
│ Miscellaneous Interrupts - in numeric order │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 30h FAR jump instruction for CP/M-style calls ............. 5**15│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) The CALL 5 entry point does a FAR jump to here (not a vector!)
2) PC-Tools PC-Cache 5.1 hooks this vector on XTs but not on ATs.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 31h Unknown ............................................... 5**16│
└─────────────────────────────────────────────────────────────────────────────┘
note PC-Tools PC-Cache 5.1 hooks this vector on ATs but not on XTs.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 32h Unknown ............................................... 5**17│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 33h Used by Microsoft Mouse Driver Function Calls ......... 5**18│
└─────────────────────────────────────────────────────────────────────────────┘
note See Chapter 14 for mouse programming.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 34h Turbo C/Microsoft languages - Floating Point emulation 5**19│
└─────────────────────────────────────────────────────────────────────────────┘
note This interrupt emulates opcode 0D8h.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 35h Turbo C/Microsoft languages - Floating Point emulation 5**20│
└─────────────────────────────────────────────────────────────────────────────┘
note This interrupt emulates opcode 0D9h.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 36h Turbo C/Microsoft languages - Floating Point emulation 5**21│
└─────────────────────────────────────────────────────────────────────────────┘
note This interrupt emulates opcode 0DAh.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 37h Turbo C/Microsoft languages - Floating Point emulation 5**22│
└─────────────────────────────────────────────────────────────────────────────┘
note This interrupt emulates opcode 0DBh.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 38h Turbo C/Microsoft languages - Floating Point emulation 5**23│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) This interrupt emulates opcode 0DCh.
2) PC-MOS/386 versions prior to 4.00 use this interrupt to interface
with the PC-MOS API. Version 4.00 and later use int 0D4h for the API.
See the Chapter 13 for the PC-MOS API.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 39h Turbo C/Microsoft languages - Floating Point emulation 5**24│
└─────────────────────────────────────────────────────────────────────────────┘
note This interrupt emulates opcode 0DDh.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 3Ah Turbo C/Microsoft languages - Floating Point emulation 5**25│
└─────────────────────────────────────────────────────────────────────────────┘
note This interrupt emulates opcode 0DEh.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 3Bh Turbo C/Microsoft languages - Floating Point emulation 5**26│
└─────────────────────────────────────────────────────────────────────────────┘
note This interrupt emulates opcode 0DFh.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 3Ch Turbo C/Microsoft languages - Floating Point emulation 5**27│
└─────────────────────────────────────────────────────────────────────────────┘
note This interrupt emulates instructions with an ES segment override.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 3Dh Turbo C/Microsoft languages - Floating Point emulation 5**28│
└─────────────────────────────────────────────────────────────────────────────┘
note This interrupt emulates a standalone FWAIT instruction
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 3Eh Turbo C/Microsoft languages - Floating Point emulation 5**29│
└─────────────────────────────────────────────────────────────────────────────┘
note Unknown.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 3Fh Overlay Manager Interrupt (Microsoft LINK.EXE) ........ 5**30│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) Default overlay manager interrupt; may be changed with LINK command
line switch. (Microsoft/IBM LINK.EXE)
2) The Microsoft Dynamic Link Library manager uses this interrupt.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 40h Hard Disk BIOS ........................................ 5**31│
└─────────────────────────────────────────────────────────────────────────────┘
Pointer to disk BIOS entry when a hard disk controller is
installed. The BIOS routines use int 30h to revector the
diskette handler (original int 13h) here so int 40h may be
used for hard disk control.
note 1) Keyboard interrupt for DEC Rainbow.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 41h Hard Disk Parameters .................................. 5**32│
└─────────────────────────────────────────────────────────────────────────────┘
Pointer to first Hard Disk Parameter Block, normally located
in the controller card's ROM. This table may be copied to RAM
and changed, and this pointer revectored to the new table.
note 1) XT, AT,XT/2, XT/286, PS/2 except ESDI disks
2) format of parameter table is:
word cylinders
byte heads
word starting reduced write current cylinder (XT only, 0 for others)
word starting write pre-comp cylinder
byte maximum ECC burst length
byte control byte
bits 0-2 drive option (XT only, 0 for others)
3 set if more than 8 heads
4 always 0
5 set if manufacturer's defect map on max cylinder+1
6 disable ECC retries
7 disable access retries
byte standard timeout (XT only, 0 for others)
byte formatting timeout (XT only, 0 for others)
byte timeout for checking drive (XT only, 0 for others)
word landing zone (AT, PS/2)
byte sectors/track (AT, PS/2)
byte 0 (zeroes)
3) normally vectored to ROM table when system is initialized.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 42h Pointer to screen BIOS entry .......................... 5**33│
└─────────────────────────────────────────────────────────────────────────────┘
Used by EGA, VGA, PS/2.
Relocated (by EGA, etc.) video handler (original int 10h).
Revectors int 10 (BIOS video) calls to EGA BIOS.
Also used by Zenith Z-100.
MCT (Modular Circuit Technology, Taiwan) 4-drive floppy
controller revectors int 13h to here.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 43h Pointer to EGA Graphics Character Table ............... 5**34│
└─────────────────────────────────────────────────────────────────────────────┘
The POST initializes this vector pointing to the default table
located in the EGA ROM BIOS. (PC-2 and up). Not initialized if
EGA not present.
This vector was referred to (mistakenly) as the Video
Parameters table in the original EGA BIOS listings.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 44h Pointer to graphics character table ................... 5**35│
└─────────────────────────────────────────────────────────────────────────────┘
(0:0110h) This table contains the dot patterns for the first 128
characters in video modes 4,5, and 6, and all 256 characters
in all additional graphics modes. Not initialized if EGA not
present.
note 1) EGA/VGA/CONV/PS - EGA/PCjr fonts, characters 00h to 7Fh.
2) Novell NetWare - High-Level Language API.
3) Also used by Zenith Z-100.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 45h Reserved by IBM (not initialized) .................... 5**36│
└─────────────────────────────────────────────────────────────────────────────┘
note Also used by Zenith Z-100, purpose unknown.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 46h Pointer to second hard disk parameter block ........... 5**37│
└─────────────────────────────────────────────────────────────────────────────┘
AT, XT/286, PS/2
(see int 41h) (except ESDI hard disks) (not initialized unless
specific user software calls for it)
also used by Zenith Z-100
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 47h Reserved by IBM (not initialized) .................... 5**38│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 48h Cordless Keyboard Translation ......................... 5**39│
└─────────────────────────────────────────────────────────────────────────────┘
(0:0120h) This vector points to code to translate the cordless keyboard
scancodes into normal 83-key values. The translated scancodes
are then passed to int 9. (not initialized on PC or AT)
This is valid on the IBM PCjr only. IBM built a number of
prototype XT/2 machines with infrared keyboards which were
later sold through salvage outlets, but this was never a
production option.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 49h Non-keyboard Scan Code Translation Table Address (PCjr) 5**40│
└─────────────────────────────────────────────────────────────────────────────┘
(0:0124h) PCjr translate table, TI Pro video
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 4Ah Real-Time Clock Alarm (Convertible, PS/2, EISA) ....... 5**41│
└─────────────────────────────────────────────────────────────────────────────┘
(not initialized on PC or AT)
Invoked by PS/2 and Convertible BIOS when real-time clock
alarm occurs.
Used by TI Professional PC for keyboard DSR interface
(keyboard BIOS interrupt)
Functions for AH=0, 1, 2 and 5 are identical to IBM's int 16h.
note When the RTC alarm function is activated it will generate an interrupt
4Ah at the time specified by the previous int 1Ah/06h alarm call.
The calling program must point the 4Ah vector to an alarm processing
routine before setting the alarm with int 1Ah/06h. It must also
cancel the alarm and resture the 1Ah vector to its original value
before returning to DOS.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 4Bh Reserved by IBM (not initialized) .................... 5**42│
└─────────────────────────────────────────────────────────────────────────────┘
Used by IBM Micro Channel SCSI hard disk controllers.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 4Ch Reserved by IBM (not initialized) .................... 5**43│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 4Dh Reserved by IBM (not initialized) .................... 5**44│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 4Eh Reserved by IBM (not initialized) .................... 5**45│
└─────────────────────────────────────────────────────────────────────────────┘
note Used instead of int 13h for disk I/O on TI Professional PC.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 4Fh Reserved by IBM (not initialized) .................... 5**46│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 50-57 IRQ0-IRQ7 Relocation .................................. 5**47│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) Normally not initialized.
2) IRQ0-IRQ7 relocated by DesQview.
3) IRQ0-IRQ7 relocated by IBM 3278 Emulation Control Program.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 58h Reserved by IBM (not initialized) .................... 5**48│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 59h Reserved by IBM (not initialized) .................... 5**49│
└─────────────────────────────────────────────────────────────────────────────┘
GSS Computer Graphics Interface (GSS*CGI)
entry DS:DX pointer to block of 5 array pointers
return CF clear
AX return code
CF set
AX error code
note 1) Int 59h is the means by which GSS*CGI language bindings communicate
with GSS*CGI device drivers and the GSS*CGI device driver controller.
2) Also used by the IBM Graphic Development Toolkit.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 5Ah Reserved by IBM (not initialized) ................... 5**50│
└─────────────────────────────────────────────────────────────────────────────┘
note IBM Cluster Adapter BIOS entry address.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 5Bh Reserved by IBM (not initialized) .................... 5**51│
└─────────────────────────────────────────────────────────────────────────────┘
note Used by IBM Cluster Adapter.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 5Ah Cluster Adapter BIOS entry address .................... 5**52│
└─────────────────────────────────────────────────────────────────────────────┘
note Normally not initialized.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 5Bh Reserved by IBM (not initialized) .................... 5**53│
└─────────────────────────────────────────────────────────────────────────────┘
note Used by cluster adapter?
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 5Ch NETBIOS interface entry port, TOPS .................... 5**54│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) See Chapter 13 for information on network programming.
2) The Texas Instruments Professional PC (TI Pro) uses 5Ch for the Pause
key on the keyboard. The TI BIOS allows any user routine to execute
from the Pause interrupt as long as it eventually returns.
3) Used by Windows/386 by Virtual Machine routines.
4) Used by Novell Netware 2.0.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 5Dh Reserved by IBM (not initialized) .................... 5**55│
└─────────────────────────────────────────────────────────────────────────────┘
note The Texas Instruments Professional PC (TI Pro) uses 5Ch for the
keyboard services.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 5Eh Reserved by IBM (not initialized) .................... 5**56│
└─────────────────────────────────────────────────────────────────────────────┘
note TI Professional PC - Program Break.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 5Fh Reserved by IBM (not initialized) .................... 5**57│
└─────────────────────────────────────────────────────────────────────────────┘
note TI Professional PC - Keyboard queueing.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 60h-67h User Program Interrupts ............................ 5**58│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) Available for general use.
2) Some Adaptec hard disk controllers used these interrupts. Models and
usages unknown.
3) Various major programs make standardized use of this group of
interrupts. Details of common use follows:
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 60h User Program Interrupt ................................ 5**59│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) Used by 10-Net Network OS Interface.
2) Used by FTP Driver - PC/TCP Packet Driver Specification.
3) See Chapter 13 for network programming calls.
4) Used by TOPS netork (TTALK.EXE).
5) The 2-The-Max VGA-16 board TSR zoom utility uses this interrupt by
default. (see int 61h for details)
6) Versa-Spool print spooler revectors int 17h to here when installing
its own 17h handler. (see int 61h also)
7) Some older OMTI and Adaptec hard disk controllers used the interrupts
from 60h to 63h as 16 bytes of scratch RAM.
8) Used by GDOSMEM Windows TSR skeleton.
entry AX GTSR Identification #
BX 00h GTSR Installation Check
return BX GTSR Identification #
entry AX GTSR Identification #
BX 01h GTSR Increment WORD in CX:DX
CX Segment => WORD
DX Offset => WORD
return none
9) Used by TDOSMEM Windows TSR skeleton.
entry AX TTSR Identification #
BX 00h GTSR Installation Check
return BX GTSR Identification #
CX Segment => local WORD
DX Offset => local WORD
entry AX TTSR Identification #
BX 01h GTSR Increment WORD in CX:DX
return none
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 61h User Interrupt ......................................... 5** │
└─────────────────────────────────────────────────────────────────────────────┘
1) Default interrupt used by Chris Dunford's PCED 2.0 API.
2) Used by Mike Geary's DENYNONE.ASM SHARE.EXE controller.
Function 00h Get Current Mode Value
entry AH 00h
return AL current mode value
Function 01h Set New Open-Mode Value
entry AH 01h
AL new value to set
return none
3) The 2-The-Max VGA-16 board TSR zoom utility uses this interrupt by
default.
Function 00h Zoom
entry AX 0000h
BX zoom factor (0-7x)
return none
Function 01h Center Zoomed Window
entry AX 0001h
BX x coordinate to center
CX y coordinate to center
return none
note 'x' and 'y' will be positioned as close to the center of the
display as possible.
Function 02h End Zoom
entry AX 0002h
return none
note Restores screen to original state.
Function 03h Report Zoom
entry AX 0003h
return AX zoom factor (0-7)
Function 04h Enter Specify Mode
entry AX 0004h
return none
note This mode is entered whenever the predefined hotkey is pressed.
Function 05h Query Zoom Window
entry AX 0005h
BX segment address of return argument array
CX offset address of return argument array
return BX:CX 14 byte array
offset[0] x start of zoom window
[1] y start of zoom window
[2] x end of zoom window
[3] y end of zoom window
[4] current zoom factor
[5] zoom offset start x
[6] zoom offset start y
Function 06h Set Zoom Window
entry AX 0006h
BX segment address of window coordinate array
CX offset address of window coordinate array
return BX:CX array
offset[0] x start of zoom window
[1] y start of zoom window
[2] x end of zoom window
[3] y end of zoom window
4) Versa-Spool print spooler revectors int 1Ch to here when installing
its own 1Ch handler.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 63h User Program Interrupt │
└─────────────────────────────────────────────────────────────────────────────┘
This interrupt is used by Novell NetWare v2.0.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 64h User Program Interrupt │
└─────────────────────────────────────────────────────────────────────────────┘
This interrupt is used by Novell NetWare IPX versions 1.02-2.0 TBMI.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 65h User Program Interrupt │
└─────────────────────────────────────────────────────────────────────────────┘
This interrupt is used by Novell NetWare v2.0.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 67h User Program Interrupt ................................ 5**60│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) Used by Lotus-Intel-Microsoft Expanded Memory Specification 3.1 and
higher. (EMS and LIM)
2) Used by Ashton-Tate/Quadram/AST Enhanced Expanded Memory Specification
3.1 and higher. (EEMS)
3) Used by Phar Lap/Quarterdeck VCPI v1.0.
4) See Chapter 10 for EMS/EEMS programming information.
5) The Advance Digital PC Slave board (also marketed by Alloy) contains
its own 8mHz 8086, up to 768K of on-card memory and a built-in
monochrome monitor adapter, communicating with an RS232 terminal at
19.2KBaud. Their operating system is an adaptation of MSDOS 2.11
called RTNX or ATNX. ?TNX uses interrupt 67h for record locking,
using an "interrupt 67h semaphore" system in which a data record
access must be preceded by a call to int 67h with a string that
contains a filename and a record number to lock.
6) Some Adaptec hard disk controllers have problems related to their
use of int 67h. Supposedly the Adaptec can be made to use a driver
instead of ROM. The driver is generated by running the ROM program
at C800:5 and this fixes the problem. Apparently this driver is
called ADAPTEC.DRV. Check with Adaptec if you suspect a problem.
7) IBM issued a known bug report listing a fault in DOS 4.0's network
handling within IBMBIO.COM. The exact wording of the report is:
UR22624 IR79404 WAIT IBMBIO INT 2FH for INT 67H causes hang
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 68h Not Used (not initialized) ........................... 5**61│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) APPC/PC Network Interface. See Chapter 13.
2) Some Toshiba laptop hard disk controllers use this interrupt.
3) Used by HDTest to communicate with BIOS entry point.
4) Used by Mike Geary's EGA720.ASM (forces EGA into 720x348 mode)
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 69h Not Used (not initialized) ........................... 5**62│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 6Ah Not Used (not initialized) ........................... 5**63│
└─────────────────────────────────────────────────────────────────────────────┘
note Used by SLR System's OPTHELP.COM, a TSR help system for their OPTASM
assembler. OPTHELP may be configured to interrupts from 60h to 7Fh.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 6Bh Not Used (not initialized) ........................... 5**64│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 6Ch System Resume Vector (Convertible) .................... 5**65│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) This vector is not initialized on the PC, XT, or jr.
2) DOS 3.2 Realtime Clock update uses this interrupt.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 6Dh Not Used (not initialized) ........................... 5**66│
└─────────────────────────────────────────────────────────────────────────────┘
note Used internally by VGA adapter - IBM, Paradise, Video 7, NCR
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 6Eh Not Used (not initialized) ........................... 5**67│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 6Fh 10-Net API............................................. 5**68│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) See Chapter 13 for information on the 10-Net API.
2) HP ES-12 Extended BIOS
a) Read CMOS Memory
entry AH 22h
BL address of CMOS byte to read
BP 0012h
return AH status
AL byte read
BP, DS destroyed
b) Write CMOS Memory
entry AH 24h
AL new value
BL address of CMOS byte to write
BP 0012h
return AH status
BP, DS destroyed
3) Novell NetWare - PCOX API (3270 PC terminal interface).
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 70h IRQ 8, Real Time Clock Interrupt (AT, XT/286, PS/2) ... 5**69│
└─────────────────────────────────────────────────────────────────────────────┘
This interrupt services the real-time clock hardware. The hardware
supports 2 modes of operation, an interrupt at a specific 24 hour
interval (i.e 9:42 am), or repeatedly every 0.976 ms (1,024 kHz).
Both modes can operate at the same time if needed.
In the 24 hour alarm mode, the interrupt is vectored here by hardware
and interrupt 4Ah is called to alert the application program of the
alarm. Int 4Ah is not handled by the BIOS other than to return, and
is normally revectored by a particular application using the alarm.
When repeating interrupt mode is active, the 32-bit microsecond
counter consisting of timer_clk_low and timer_clk_hi is decremented
by 976 us on every interrupt. When the timer reaches zero, the
byte pointed to by the offset @timer_wait_off and and segment
@timer_wait_seg is set to 80h (this pointer is set by an application
program through int 1Ah function ah=6).
The Motorola MC146818A real time clock chip, or its equivalent, can be
programmed to generate the real time clock interrupt (int 70h)
approximately 1024 times per second. The BIOS Real Time Clock ISR is
invoked on each real time clock interrupt. Only AT BIOSs support the
Real Time Clock ISR.
The BIOS initializes the int 70h vector to address F000:5124h.
Three AT BIOS functions interface with the int 70h Real Time Clock ISR.
These are:
int 15h, AH 83h Event Wait Interval
int 15h, AH 86h Wait
int 1Ah, AH 06h Set User Alarm
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 71h IRQ 9, Redirected to IRQ 8 (AT, XT/286, PS/2) ......... 5**70│
└─────────────────────────────────────────────────────────────────────────────┘
note LAN Adapter 1 (rerouted to int 0Ah [IRQ2] by BIOS).
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 72h IRQ 10 (AT, XT/286, PS/2) Reserved .................. 5**71│
└─────────────────────────────────────────────────────────────────────────────┘
note Hardware servicer (called by hardware 8259-2, IRQ 10).
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 73h IRQ 11 (AT, XT/286, PS/2) Reserved .................. 5**72│
└─────────────────────────────────────────────────────────────────────────────┘
note Hardware servicer (called by hardware 8259-2, IRQ 11).
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 74h IRQ 12 Mouse Interrupt (PS/2) ........................ 5**73│
└─────────────────────────────────────────────────────────────────────────────┘
note Hardware servicer (called by hardware 8259-2, IRQ 12).
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 75h IRQ 13, Coprocessor Error (AT) ........................ 5**74│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) BIOS redirects math coprocessor errors to int 2 (NMI).
2) The math co-processor 80287 invokes this interrupt. Int 75h calls the
non-maskable interrupt int 2 to halt the system. (80287 is not used if
this vector is left pointing here). Programs which use the 80287 must
re-vector this interrupt to use the 80287.
3) Under DOS 3.2, this interrupt is routed through the DOS interrupt stack
pool like device interrupts. However, coprocessor exceptions generally
do not resume via IRET and this fill the interrupt pool (stacks
allocated and never deallocated) on exceptions. Microsoft has a patch
available for DOS 3.2.
4) Weitek ABACUS x167 math coprocessor exception handler shares this
interrupt with Intel 80x87 if present.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 76h IRQ 14, Hard Disk Controller (AT, XT/286, PS/2) ....... 5**75│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) Called by hardware 8259-2 IRQ 14.
2) When the hard disk controller has completed its task, it signals
completion though hardware activation of int 76h. The status in
hdsk_int_flags is set to "done", a value of 0FFh. Int 15/fn91h may also
be called to signal the interrupt is done.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 77h IRQ 15 (AT, XT/286, PS/2) Reserved ................... 5**76│
└─────────────────────────────────────────────────────────────────────────────┘
note Future services (called by hardware 8259-2 IRQ 15).
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 78h Not Used .............................................. 5**77│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) Used by Novell Netware 2.0 - non-dedicated shell.
2) DESQview uses ints 78h-7Fh for itself to revector the 8259 interrupt
controllers.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 79h Not Used .............................................. 5**78│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) Used by LAN:Datacore runtimes for BASIC and C by Lanquest Group in
releases after late '86.
2) Used by AutoCAD 2.5/2.6 ADI Digitizer interface (default).
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 7Ah Reserved .............................................. 5**79│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) Novell NetWare - Low-Level API APX, versions 2.0a+. See Chapter 13.
2) AutoCAD Device Interface, used by various video boards.
3) IBM 3270 Emulator program.
4) Also used by early versions of "File Access Utility" by Automated
Insurance Resource Systems. AIRS changed to a different interrupt in
late '86 to eliminate conflict with Novell.
5) Used by LAN:Datacore runtimes for BASIC and C by Lanquest Group in
versions 2.5 and higher before late '86. Lanquest changed to int 79h
to prevent Novell conflict.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 7Bh-7Eh Not Used by IBM .................................... 5**80│
└─────────────────────────────────────────────────────────────────────────────┘
Btrieve API
entry register unknown
functions:
00h open
01h close
02h insert
03h update
04h delete
05h get_equal
06h get_next
07h get_prev
08h get_greater
09h get_gr_eql
0Ah get_less
0Bh get_less_eq
0Ch get_first
0Dh get_last
0Eh create
0Fh stat
10h extend
11h set_dir: set directory information
12h get_dir: get directory information
13h begin_trans
14h end_trans
15h abort_trans
16h get_pos: get record position number
17h get_direct: get data by sending record position
18h step_direct
19h stop
1Ah version
1Bh unlock
1Ch reset
return unknown
note Btrieve sets low byte of vector to 33h; this serves as the installation
check.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 7Fh IBM 8514/A Graphics Adapter API ....................... 5**82│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) 59 8514/A API functions available (HDILOAD.EXE) parameters unknown.
2) Used by second copy of COMMAND set with SHELL=.
3) Not used by COMMAND /C at DOS prompt.
4) The IBM RTIC (Real Time Interface Coprocessor) Multiport (and
Multiport/2) use int 7Fh as a method of communication between the
system-unit resident interrupt handler and the RTIC card's operating
system. There is a convention for using it in which register AX
contains the signature of the handler that should handle the interrupt.
Some signatures are:
AX 0200h is a call to the current task dispatcher
(from the BTRIEVE application interface).
AX 0101h is a call from an application to the RTIC
function request mechanism.
AX 0FEEDh is a call from the ICAINTH.SYS interrupt handler.
5) MultiLink Advanced (a custom version of PC-MOS/386), versions 3.03 and
higher, from The Software Link, Inc.
Function 02h Invoke user interface (multitasking DOS shell)
entry AH 02h
AL 00h
return unknown
Function 0Dh Set new spooler parameters
entry AH 0Dh
AL ASCII code for disposition (D,S,H,N)
BH ASCII code for priority (0-9)
BL ASCII code for class (A-Z)
return AL Error
00h OK
01h no spooler installed
02h invalid request
Function 0Eh Get spooler parameters
entry AH 0Eh
return AL 01h if no spooler installed, otherwise:
AL ASCII code for disposition (D,S,H,N)
BH ASCII code for priority (0-9)
BL ASCII code for class (A-Z)
6) There have been mentions of assorted other little-known programs using
this interrupt. In view of its use by DOS and the increasingly-popular
8514/A adapter, it would probably be wise to avoid int 7Fh for
aftermarket application software.
7) Also used by IBM HLLAPI.
8) Used internally by later versions of Tom Mack's RBBS-PC BBS system.
9) Used by Novell Netware 2.0+ to switch non-dedicated shell to console
mode.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 80h-85h Reserved by BASIC .................................. 5**83│
└─────────────────────────────────────────────────────────────────────────────┘
note Interrupts 80h through 0ECh are apparently unused and not initialized
in most clone systems. Not known if GWBASIC or MBASIC use any of these
interrupts.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 80h Novell Netware 2.0 .................................... 5** │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 81h Novell Netware 2.0 .................................... 5** │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 82h Reserved by BASIC ..................................... 5** │
└─────────────────────────────────────────────────────────────────────────────┘
note 1) Used in some early versions of NEC Multispeed laptop for ROM
application management.
2) Used by Pecan Software's Pascal compiler (P-system).
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 81h Used by Proteon Network ............................... 5** │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 86h Int 18 when relocated by NETBIOS ...................... 5**84│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 86h-0F0h Used by BASIC when BASIC interpreter is running ... 5**85│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0A0h-0D0h TI Professional - free interrupt pool ............ 5** │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0A4h Right Hand Man API .................................... 5**86│
└─────────────────────────────────────────────────────────────────────────────┘
entry AH RHM function (unknown)
return unknown
note Right-Hand Man is a shareware TSR desktop utility similar to SideKick.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0D4h PC-MOS/386 API ........................................ 5**87│
└─────────────────────────────────────────────────────────────────────────────┘
note This interrupt is used for access to the PC-MOS/386 4.x operating
system's user API. Previous versions of the OS used interrupt 38h.
See Chapter 13 for API programming information.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0E0h Digital Research CP/M-86 function calls ............... 5**88│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) Lotus 123 Release 2 reportedly alters the int 0E0h vector during
operation and leaves it pointing somewhere in the TPA on exit.
Perhaps used by the mysterious Lotus add-on program hook?
2) Used by Digital Research CP/M-86, Concurrent CP/M and Concurrent DOS
API entry points. Values are typicall passed in the DX register and
returned in the AX register.
3) Used by Larry Himes PD TBACK background timeslicer for DOS. (very old)
4) Used by American Data Technology SmartFAX products.
entry AH 20h Send FAX
AL 02h for FAX format file
03h for ASCII format file
CH number of redials (0-9). Defaults to 9 if input out of range.
CL backoff time (1-99). 1 unit is 15 sec, value is set to 99
if out of range
DS:DX input filename (ASCII). 20 bytes max.
DX:BX dial number. Speed dial number is allowed
return AL (if bit 7 set) number of files transmitted
(bit 7 not set) 0FFh file not found
0FEh no dial tone
0FDh line busy or non-FAX tone
0FCh other error
entry AH 21h reserved
entry AH 22h Auto/Manual Transmission Toggle
AL 00h switch to Auto mode (default)
01h switch to Manual mode
return none
entry AH 23h Set Manual Receive Mode
AL 00h switch to Auto mode (default)
01h switch to Manual mode. SmartFAX will not answer phone
return none
entry AH 24h Send FAX Handshake to Remote
note No other parameters are necessary. No returns.
entry AH 25h Enable/Disable Background Task for Spooling
AL 00h enabled background operation. Program will put the
received data in the 80188 to spool.
01h disables background operation. Does not spool data.
Data can be recovered by fns 26h and 27h.
return none
entry AH 26h Check 80188 Buffer
AX data length
BL 00h some data of the same page appears in the next buffer
01h end of page, more to follow
02h end of page, last page
entry AH 27h Get Data from 80188 Buffer
DS:DX pointer to buffer to be saved, minimum size 12Kb.
return AX data length
BL 00h some data of the same page appears in the next buffer
01h end of page, more to follow
02h end of page, last page
entry AH 28h Reset After Receive
note Resets SmartFAX for next call. No other parameters.
entry AH 29h Enable/Disable Communication Function
AL 00h enable communication
01h disable communication
note In disable mode, SmartFAX will not send or receive.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0E1h PC Cluster Program .................................... 5**89│
└─────────────────────────────────────────────────────────────────────────────┘
note This is a pointer to the disk server data table.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0E2h PC Cluster Program .................................... 5**90│
└─────────────────────────────────────────────────────────────────────────────┘
note Interrupt 1Ch is revectored to here.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0E4h Logitech Modula-2 v2.0 Monitor Entry ................ 5**91│
└─────────────────────────────────────────────────────────────────────────────┘
entry AX 05h monitor entry
06h monitor exit
BX priority
return unknown
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0E5h Not Used .............................................. 5**92│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0E6h Not Used .............................................. 5**93│
└─────────────────────────────────────────────────────────────────────────────┘
note Used by PKzip file compressor.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0E7h Not Used .............................................. 5**94│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0E8h Not Used .............................................. 5**95│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0E9h Not Used .............................................. 5**96│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0EAh Not Used .............................................. 5**97│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0EBh Not Used .............................................. 5**98│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0ECh Not Used .............................................. 5**99│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0EDh Not Used ............................................. 5**100│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0EEh Not Used ............................................. 5**101│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0EFh GEM interface (Digital Research) ..................... 5**102│
└─────────────────────────────────────────────────────────────────────────────┘
entry CX 0473h
DS:DX pointer to GEM parameter block
note no other parameters are known
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0F0h unknown .............................................. 5**103│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) Used by secondary copy of COMMAND when SHELL= set.
2) Not used by COMMAND /C at DOS prompt.
3) Used by BASIC while in interpreter.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupts 0F1h-0FFh (absolute addresses 3C4h-3FFh) ................. 5**104│
└─────────────────────────────────────────────────────────────────────────────┘
note Location of Interprocess Communications Area.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0F4h Not Used ............ ................................ 5**105│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0F5h Not Used ............ ................................ 5**106│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0F8h Set Shell Interrupt (OEM) ............................ 5**107│
└─────────────────────────────────────────────────────────────────────────────┘
Set OEM handler for int 21h calls from 0F9h through 0FFh
entry AH 0F8h
DS:DX pointer to handler for Functions 0F9h thru 0FFh
note 1) To reset these calls, pass DS and DX with 0FFFFh. DOS is set up to
allow ONE handler for all 7 of these calls. Any call to these handlers
will result in the carry bit being set and AX will contain 1 if they are
not initialized. The handling routine is passed all registers just as
the user set them. The OEM handler routine should be exited through an
IRET.
2) 10 ms interval timer (Tandy?)
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0F9h Reserved ............................................. 5**108│
└─────────────────────────────────────────────────────────────────────────────┘
note First of 8 SHELL service codes, reserved for OEM shell (WINDOW); use
like HP Vectra user interface?
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0FAh USART ready (RS-232C) ................................ 5**109│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0FBh USART RS ready (keyboard) ............................ 5**110│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0FCh Unknown ...............................................5**111│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0FDh reserved for user interrupt .......................... 5**112│
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0FEh reserved by IBM ...................................... 5**113│
└─────────────────────────────────────────────────────────────────────────────┘
note AT/XT286/PS50+ - vector destroyed by return from protected mode.
┌─────────────────────────────────────────────────────────────────────────────┐
│Interrupt 0FFh reserved by IBM ...................................... 5**114│
└─────────────────────────────────────────────────────────────────────────────┘
note 1) AT/XT286/PS50+ - vector destroyed by return from protected mode.
2) Zenith Z-100 (S-100 bus MSDOS) warm boot.